﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Mvc.Models;
using System.Web.UI.WebControls;
using System.IO;
using System.Web.UI;


namespace Mvc.Controllers
{
    [MyAuthoirize]
    public class ProyectoController : Controller
    {
        private UsersContext db = new UsersContext();

        //
        // GET: /Proyecto/

        public ActionResult Index()
        {
            var proyects = db.Proyects.Include(p => p.Branch).Include(p => p.Departamento).Include(p => p.TipoProyecto);
            return PartialView(proyects.ToList());
        }

        //
        // GET: /Proyecto/Details/5

        public ActionResult Details(int id = 0)
        {
            Proyecto proyecto = db.Proyects.Find(id);
            if (proyecto == null)
            {
                return HttpNotFound();
            }
            return PartialView(proyecto);
        }

        //
        // GET: /Proyecto/Create

        public ActionResult Create()
        {


            ViewBag.Subgerencia = new List<SelectListItem>
             {
                new SelectListItem {Text = "Gestión", Value = "Gestión"},
                new SelectListItem {Text = "Adecuación", Value = "Adecuación"},           
             };


            ViewBag.BranchId = new SelectList(db.Branches, "BranchId", "nombre");
            ViewBag.DepartamentoID = new SelectList(db.Departamentos, "ID", "Nombre");
            ViewBag.TipoProyectoID = new SelectList(db.TipoProyectos, "ID", "Nombre");
            return PartialView();
        }

        //
        // POST: /Proyecto/Create

        [HttpPost]
        //[ValidateAntiForgeryToken]
        public ActionResult Create(Proyecto proyecto)
        {
            if (ModelState.IsValid)
            {
                db.Proyects.Add(proyecto);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.Subgerencia = new List<SelectListItem>
        {
            
            new SelectListItem {Text = "Gestión", Value = "Gestión"},
            new SelectListItem {Text = "Adecuación", Value = "Adecuación"},
            
           
        };



            ViewBag.BranchId = new SelectList(db.Branches, "BranchId", "nombre", proyecto.BranchId);
            ViewBag.DepartamentoID = new SelectList(db.Departamentos, "ID", "Nombre", proyecto.DepartamentoID);
            ViewBag.TipoProyectoID = new SelectList(db.TipoProyectos, "ID", "Nombre");
            return PartialView(proyecto);
        }

        //
        // GET: /Proyecto/Edit/5

        public ActionResult Edit(int id = 0)
        {
            bool gestion = false;
            bool adecuacion = false;


            Proyecto proyecto = db.Proyects.Find(id);
            if (proyecto == null)
            {
                return HttpNotFound();
            }
            if (proyecto.Subgerencia == "Gestión")
            {
                gestion = true;
            }
            else
            {
                adecuacion = true;
            }


            ViewBag.Subgerencia = new List<SelectListItem>
        {
            
            new SelectListItem {Text = "Gestión", Value = "Gestión",Selected=gestion},
            new SelectListItem {Text = "Adecuación", Value = "Adecuación",Selected=adecuacion},
            
           
        };

            ViewBag.BranchId = new SelectList(db.Branches, "BranchId", "nombre", proyecto.BranchId);
            ViewBag.DepartamentoID = new SelectList(db.Departamentos, "ID", "Nombre", proyecto.DepartamentoID);
            ViewBag.MunicipioID = new SelectList(db.Municipios, "ID", "Nombre", proyecto.MunicipioID);
            ViewBag.TipoProyectoID = new SelectList(db.TipoProyectos, "ID", "Nombre", proyecto.TipoProyectoID);
            return PartialView(proyecto);
        }

        //
        // POST: /Proyecto/Edit/5

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(Proyecto proyecto)
        {

            bool gestion = false;
            bool adecuacion = false;

            if (ModelState.IsValid)
            {
                db.Entry(proyecto).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            if (proyecto == null)
            {
                return HttpNotFound();
            }
            if (proyecto.Subgerencia == "Gestión")
            {
                gestion = true;
            }
            else
            {
                adecuacion = true;
            }

            ViewBag.Subgerencia = new List<SelectListItem>
        {
            
            new SelectListItem {Text = "Gestión", Value = "Gestión",Selected=gestion},
            new SelectListItem {Text = "Adecuación", Value = "Adecuación",Selected=adecuacion},
            
           
        };

            ViewBag.BranchId = new SelectList(db.Branches, "BranchId", "nombre", proyecto.BranchId);
            ViewBag.DepartamentoID = new SelectList(db.Departamentos, "ID", "Nombre", proyecto.DepartamentoID);
            ViewBag.MunicipioID = new SelectList(db.Municipios, "ID", "Nombre", proyecto.MunicipioID);
            ViewBag.TipoProyectoID = new SelectList(db.TipoProyectos, "ID", "Nombre", proyecto.TipoProyectoID);
            return PartialView(proyecto);
        }

        //
        // GET: /Proyecto/Delete/5

        public ActionResult Delete(int id = 0)
        {
            Proyecto proyecto = db.Proyects.Find(id);
            if (proyecto == null)
            {
                return HttpNotFound();
            }
            return PartialView(proyecto);
        }

        //
        // POST: /Proyecto/Delete/5

        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            Proyecto proyecto = db.Proyects.Find(id);
            db.Proyects.Remove(proyecto);
            db.SaveChanges();
            return RedirectToAction("Index");
        }


        public ActionResult getMunicipios(int DepartamentoId)
        {

            ViewBag.MunicipioID = new SelectList(db.Municipios.Where(x => x.DepartamentoID == DepartamentoId), "ID", "Nombre");
            return PartialView();

        }


        public ActionResult ExportToExcel()
        {
            var proyectos = db.Proyects.Include(d => d.Departamento).Include(c => c.Municipio).Include(t => t.TipoProyecto).ToList();

            var grid = new GridView();

            grid.DataSource = from p in proyectos
                              select new
                              {
                                  Nombre = p.Nombre,
                                  Tipo = p.TipoProyecto.Nombre,
                                  Objeto = p.ObjetoProyecto,
                                  Remitente = p.Remitente,
                                  Valor_del_Proyecto = p.ValorProyecto,
                                  Valor_financiación = p.ValorFinanciacion,
                                  Departamento = p.Departamento.Nombre,
                                  Municipio = p.Municipio.Nombre,
                                  Subgerencia = p.Subgerencia,
                                  Entidad_postulante = p.Entidad,
                                  Nit = p.NitEntidad,
                                  Reperesentante = p.RepresentanteLegal,
                                  Documento_representante = p.DocumentoRepresentante,
                                  Observaciones = p.Observaciones,
                                  Anexos = p.Anexos

                              };
            grid.DataBind();

            Response.ClearContent();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment; filename=Reporte.xls");
            Response.ContentType = "application/ms-excel";

            Response.Charset = "";
            StringWriter sw = new StringWriter();
            HtmlTextWriter htw = new HtmlTextWriter(sw);

            grid.RenderControl(htw);

            Response.Output.Write(sw.ToString());
            Response.Flush();
            Response.End();

            return View("MyView");
        }


        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}